package com.fh.module_main.ext

import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.navigation.NavController
import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager2.widget.ViewPager2
import com.alibaba.android.arouter.launcher.ARouter
import com.fh.lib_base.config.AppConstants
import com.fh.lib_base.route.RouteCenter
import com.fh.lib_base.util.CacheUtil
import com.fh.lib_base.util.SettingUtil
import com.fh.module_main.ui.fragment.MineFragment
import com.fh.module_main.ui.fragment.MyHotelFragment
import com.fh.module_main.ui.fragment.SearchFragment
import com.ittianyu.bottomnavigationviewex.BottomNavigationViewEx


fun ViewPager2.initMain(fragment: Fragment): ViewPager2 {
    //是否可滑动
    this.isUserInputEnabled = false
    this.offscreenPageLimit = 3
    //设置适配器
    adapter = object : FragmentStateAdapter(fragment) {
        override fun createFragment(position: Int): Fragment {
            when (position) {
                0 -> {
                    return SearchFragment()
                }
                1 -> {
                    return MyHotelFragment()
                }
                2 -> {
                    return MineFragment()
                }
                else -> {
                    return SearchFragment()
                }
            }
        }
        override fun getItemCount() = 3
    }
    return this
}

fun BottomNavigationViewEx.init(navigationItemSelectedAction: (Int) -> Unit): BottomNavigationViewEx {
    enableAnimation(true) //开启或关闭点击动画(文字放大效果和图片移动效果)。 默认为 true.
    enableShiftingMode(false) //开始或关闭导航条位移模式。如果为 true，选中项和其他项的宽度不一样。当菜单数大于3时，默认为 true。
    enableItemShiftingMode(true)//开始或关闭子菜单位移模式。 如果为 true，除了当前选中项，其他项的文本将会隐藏。 当菜单数大于3时，默认为 true。
    itemIconTintList = SettingUtil.getColorStateList(SettingUtil.getColor(context))
    itemTextColor = SettingUtil.getColorStateList(context)
    setTextSize(12F)
    setOnNavigationItemSelectedListener {
        navigationItemSelectedAction.invoke(it.itemId)
        true
    }
    return this
}


/**
 * 拦截BottomNavigation长按事件 防止长按时出现Toast ---- 追求完美的大屌群友提的bug
 * @receiver BottomNavigationViewEx
 * @param ids IntArray
 */
fun BottomNavigationViewEx.interceptLongClick(vararg ids:Int) {
    val bottomNavigationMenuView: ViewGroup = (this.getChildAt(0) as ViewGroup)
    for (index in ids.indices){
        bottomNavigationMenuView.getChildAt(index).findViewById<View>(ids[index]).setOnLongClickListener {
            true
        }
    }
}
/**
 * 拦截登录操作，如果没有登录跳转登录，登录过了贼执行你的方法
 */
fun NavController.jumpByLogin(action: (NavController) -> Unit) {
    if (CacheUtil.isLogin()) {
        action(this)
    } else {
        //因为登录模块是单独的组件，组件之间跳转用路由
//        startContainerActivity(AppConstants.Router.Login.F_LOGIN)
//        ARouter.getInstance().build(AppConstants.Router.Login.MINE_TEST)
//            .navigation()
        RouteCenter.navigate(AppConstants.Router.Mine.MINE_TEST)
    }
}
/**
 * 拦截登录操作，如果没有登录跳转登录，登录过了贼执行你的方法
 */
fun NavController.jumpNoLogin(action: (NavController) -> Unit) {
    action(this)
}


